Skip to content

refactor(collections)!: consolidate platform backlog collections into project-planning - #2602

Open
Bill Berry (WilliamBerryiii) wants to merge 14 commits into
mainfrom
feat/collection-topology-consolidation
Open

refactor(collections)!: consolidate platform backlog collections into project-planning#2602
Bill Berry (WilliamBerryiii) wants to merge 14 commits into
mainfrom
feat/collection-topology-consolidation

Conversation

@WilliamBerryiii

@WilliamBerryiii Bill Berry (WilliamBerryiii) commented Aug 4, 2026

Copy link
Copy Markdown
Member

Pull Request

Description

Azure DevOps, GitHub, Jira, and GitLab each carried their own package, their own backlog manager agent, and near-duplicate copies of the same backlog protocol — discovery, triage, sprint planning, PRD-to-work-item planning, and execution.

What actually differs between trackers is small: the command surface, the field vocabulary, the reference-ID prefix, and the action verbs. Everything structural was common and duplicated four ways.

This PR consolidates backlog capability into project-planning. The shared protocol is owned by skills, and each platform contributes only its delta as a skill reference. A single backlog-manager agent resolves the target platform before dispatching, so a team using more than one tracker no longer has to pick a collection per tracker.

Related Issue(s)

Fixes #2601

Type of Change

Select all that apply:

Code & Documentation:

  • Bug fix (non-breaking change fixing an issue)
  • New feature (non-breaking change adding functionality)
  • Breaking change (fix or feature causing existing functionality to change)
  • Documentation update

Infrastructure & Configuration:

  • GitHub Actions workflow
  • Linting configuration (markdown, PowerShell, etc.)
  • Security configuration
  • DevContainer configuration
  • Dependency update

AI Artifacts:

  • Reviewed contribution with hve-builder and addressed all actionable findings
  • Copilot instructions (.github/instructions/*.instructions.md)
  • Copilot prompt (.github/prompts/*.prompt.md)
  • Copilot agent (.github/agents/*.agent.md)
  • Copilot skill (.github/skills/*/SKILL.md)
  • Copilot hook (.github/hooks/*/*.json)
  • Eval spec added/updated for changed AI artifacts (evals/)

Other:

  • Script/automation (.ps1, .sh, .py)
  • Other (please describe):

Changes

Read this first: the diff is mostly relocation

The file count is large because four packages were dissolved and their contents relocated. Most changed paths are the same bytes at a new address. Ninety-eight files carry real edits.

  369 changed paths
  ┌────────────────────────────────────────────────────────────────────────────┐
  │ relocated  ████████████████████████████████████████████████   119   32%    │ skim
  │ retired    █████████████████████████████████                   83   22%    │ skim
  │ generated  ████████████████████████████                        69   19%    │ skip
  │ edited     █████████████████████████                           61   17%    │ REVIEW
  │ new        ███████████████                                     37   10%    │ REVIEW
  └────────────────────────────────────────────────────────────────────────────┘
     relocated = 103 byte-identical moves + 16 moved-and-edited paths
     generated = docs/reference/, owned entirely by npm run docs:generate
     retired   = deletions whose capability is superseded, not lost

GitHub collapses each rename pair into one entry, so the PR view shows roughly 250 entries rather than 369 paths.

Where things moved

Paths below are relative to .github/ unless they start with docs/ or evals/. SAME counts pairs whose content is byte-identical across the move.

  SOURCE  (on main)                         DESTINATION  (this branch)          PAIRS  SAME
  -----------------------------------------------------------------------------------------
  skills/gitlab/gitlab/                ---> skills/project-planning/gitlab/        54    53
  skills/jira/jira/                    ---> skills/project-planning/jira/          47    45
  skills/github/gh-code-scanning/      ---> skills/security/gh-code-scanning/       5     5
  prompts/ado/ado-{pr,build-info}      ---> prompts/hve-core/                       2     0
  instructions/ado/ado-{pr,build-info} ---> skills/**/backlog-mgmt/references/      2     0
  instructions/github/community-*      ---> instructions/project-planning/          1     0
  evals/**/ado-backlog-manager.yml     ---> evals/**/backlog-manager.yml            1     0
  docs/reference/**  (generated)       ---> docs/reference/**  (regenerated)        7     0
  -----------------------------------------------------------------------------------------
                                            TOTAL                                 119   103

The two large blocks — 101 pairs across gitlab and jira — are Python skill packages moving intact: scripts, tests, fuzz corpora, and lockfiles. Only three files in those blocks differ, and each difference is a path string inside a SKILL.md or corpus README.md.

What replaced the retired packages

  RETIRED PACKAGES                   CONSOLIDATED INTO
  ───────────────────                ─────────────────

    ado    ──┐                       project-planning/
    github ──┤                         │
    jira   ──┼──────────────────────▶  ├─ agents/     backlog-manager        (resolves platform)
    gitlab ──┘                         │              functional-planner     (PRD → hierarchy)
                                       │  subagents/  ado-backlog-executor
     7 agents  ──▶  5 agents           │              github-backlog-executor
    18 prompts ──▶  0 prompts          │              jira-backlog-executor
    18 instrs  ──▶  1 instruction      │
                                       ├─ skills/     backlog-management     (shared protocol)
                                       │              backlog-plan           (read-only)
                                       │              backlog-execute        (mutating)
                                       │              functional-planner
                                       │
                                       └─ skills/     gitlab/  jira/         (relocated intact)

                                     security/
                                       └─ skills/     gh-code-scanning/      (relocated intact)

                                     hve-core/
                                       └─ prompts/    ado-create-pull-request
                                                      ado-get-build-info

Platform deltas that survive live as skill references under backlog-management/references/{ado,github,jira}.md, loaded on demand rather than through always-on applyTo globs.

Packages

Ten packages remain in .github/plugin/marketplace.json. ado, github, jira, and gitlab are retired and their capability folded into project-planning.

Change Detail
Retired ado, github, jira, gitlab catalog entries and their docs/plugins/ pages
Rewired marketplace.json package recipes, docs/plugins/project-planning.md, .vscode/settings.json

The .vscode/settings.json change is broader than the four retired packages: it reconciles every artifact discovery location with the current directory topology, including accessibility, data-science, and privacy locations. No entry is retained for a directory that does not exist.

New skills and agents

Artifact Role
backlog-management Platform-agnostic core: planning-file lifecycle, planning-type enum, scope normalization, reference-ID scheme, similarity assessment, three-tier autonomy, content sanitization, resumable state
backlog-plan Read-only half: discovery, triage, sprint, my-work, task-plan
backlog-execute Mutating half: add, run
functional-planner PRD-to-hierarchy planning, no tracker mutation
backlog-manager agent Resolves platform, classifies workflow, dispatches
functional-planner agent PRD hierarchy planning
{ado,github,jira}-backlog-executor subagents Apply a dispatched operation set against one confirmed tracker
backlog-guardrails instruction Always-on mutation guardrail over backlog tracking roots

Per-platform deltas live in backlog-management/references/{ado,github,jira}.md.

Retired artifacts

Kind Deleted Of which content relocated Retired outright
Agents 7 0 7
Prompts 18 0 18
Instructions 18 2 16

Net totals: agents 64 to 62 (7 deleted, 5 added), prompts 67 to 49, instruction files 79 to 62 (18 deleted, 1 added).

All 18 deleted instruction files carried an applyTo glob, and 14 of those attached to a backlog tracking root (.copilot-tracking/workitems/**, github-issues/**, or jira-issues/**); the remaining four attached elsewhere. Their content is now reached through skill references, so it loads on demand rather than against the always-on context budget. A new backlog-guardrails.instructions.md keeps mutation safety attached to those three roots for consumers that never load a backlog skill. Separately, community-interaction.instructions.md is relocated from instructions/github/ to instructions/project-planning/ and remains an instruction.

Preserved ADO workflows

Pull request creation and build information have no cross-platform equivalent and are preserved as skill references rather than retired:

From To
instructions/hve-core/ado-create-pull-request.instructions.md backlog-management/references/ado-pull-request.md
instructions/hve-core/ado-get-build-info.instructions.md backlog-management/references/ado-build-info.md

Documentation

docs/agents/ado-backlog/ and docs/agents/github-backlog/ are replaced by a unified docs/agents/backlog/. Azure DevOps pages with no cross-platform equivalent — build monitoring, PR creation, PRD planning — are retained under an Azure DevOps Delivery Workflows sidebar category and linked from the agents catalog. docs/plugins/ package pages and Docusaurus configuration are updated.

Other

.github/workflows/gh-code-scanning.yml is corrected to .github/skills/security/gh-code-scanning/, following that skill's relocation. scripts/evals/New-AgentSurfaceSignatures.ps1 emits an alternation covering every declared tracking root, which the multi-platform backlog-manager requires. Its call site is wrapped in @() so zero-scope and single-scope results stay arrays, and the Windows drive-letter disallow is unchanged from main because the relaxed form could be defeated by unrelated same-line text.

Testing

The validation suite ran once against the final tree.

Command Result
npm run validate:local 24 of 25 lanes pass. See the note below on lint:md-links
npm run validate:docs Pass. Typecheck clean, 101 tests in 10 suites
npm run spell-check Pass. 0 issues in 805 files
npm run test:ps -- -TestPath scripts/tests/evals/ Pass. 453 passed, 0 failed, 1 skipped
Build-AgentBehaviorSpec.ps1 -WhatIf Pass. No drift
npx vally lint --eval-spec evals/ Pass. Pre-existing regression-without-baseline warnings only
npm run docs:generate:check Pass. Non-blocking ms.date drift only

lint:md-links did not pass locally. Two external URLs returned Status: 0, a connection failure rather than a 404: a learn.microsoft.com threat-modeling page and an OWASP SSRF page. Both live in files this PR does not modify, and every internal link resolved. CI re-checks this lane from a runner with unrestricted egress.

Acceptance criteria were independently re-verified rather than accepted from the implementation record: package count, absence of residual retired-package paths across .github/ and extension/, user-invocable values on the five affected skills, story-quality levels, sprint-planning platform neutrality, and Docusaurus package coverage.

Known limitations

  • Jira reads route through Jira Backlog Executor because Jira's only command surface is a CLI reached through a terminal. Azure DevOps and GitHub reads do not need that round trip. This is the accepted cost of keeping the orchestrator free of terminal access.
  • Azure DevOps exposes no tool that lists a project's process types, so work-item types are confirmed with the user and recorded as unvalidated rather than discovered.
  • GitHub exposes no milestone-list tool, so milestones with zero open issues are undiscoverable by the sprint workflow.
  • docs/plugins/ sidebar positions are non-contiguous after the four package pages were deleted. Docusaurus tolerates gaps.

Checklist

Required Checks

  • Documentation is updated (if applicable)
  • Files follow existing naming conventions
  • Changes are backwards compatible (if applicable)
  • Tests added for new functionality (if applicable)

AI Artifact Contributions

  • Used hve-builder review mode to review contribution
  • Addressed all actionable findings from the hve-builder review
  • Verified contribution follows common standards and type-specific requirements

Required Local Checks

  • Local validation aggregate: npm run validate:local
  • Documentation validation (if docs changed): npm run validate:docs
  • Spell checking: npm run spell-check
  • Link validation: npm run lint:md-links

Security Considerations

  • This PR does not contain any sensitive or NDA information
  • Any new dependencies have been reviewed for security issues
  • Security-related scripts follow the principle of least privilege

Content sanitization guards run before any platform-bound mutation, and an inferred platform requires explicit user confirmation before the first mutating call. The Backlog Manager orchestrator holds no tracker write tool and no terminal tool, so a mutation it is asked to perform directly is unreachable rather than merely disallowed. Each executor carries exactly one platform's write surface.

Release Communication

The breaking change is communicated through Conventional Commits, not a hand-edited CHANGELOG. Each commit that removes or narrows a public surface carries a ! marker and a BREAKING CHANGE: footer, so release-please derives the version bump and the release notes from the commit history.

Additional Notes

Opened as a draft. This branch is rebased onto current main as a single linear history; collections/ and plugins/ no longer exist there after #2577.

The reviewable surface is 98 files. See the change-shape chart at the top of Changes: 119 relocated paths, 69 generated docs/reference/ pages, and 83 retirements need no line-by-line reading. The 37 new and 61 edited files carry every substantive decision. collections/ and plugins/ no longer appear in this diff — both were removed from main by #2577.

Parallel PR. This is one of two cut from the same working tree, alongside #2599 (artifact portability). Both branch from main and do not stack. Whichever merges second should resolve generated conflicts by discarding both sides and re-running plugin:generate, docs:generate, and extension:prepare rather than merging generated files by hand.

Known follow-ups, recorded and not blocking:

  • docusaurus.config.js hardcodes the package list and omits installer and rpi — pre-existing at merge-base
  • docs:generate stamps ms.date on every page it touches regardless of content change, requiring a manual revert pass after every regeneration
  • The four retired Marketplace identities are orphaned with no tombstone mechanism
  • docs/agents/project-planning/arch-diagram-builder.md and security-plan-creator.md document agents that no longer exist — pre-existing at merge-base, not introduced here
  • A cross-platform Windows-path signature exemption needs its own change with mixed-token regression cases

… project-planning

Azure DevOps, GitHub, Jira, and GitLab each carried a collection, a backlog
manager agent, and near-duplicate copies of the same backlog protocol. What
actually differs between trackers is the command surface, field vocabulary,
reference-ID prefix, and action verbs; everything structural was common.

Backlog capability now lives in project-planning, with the shared protocol
owned by skills and each platform expressed as a reference delta.

- retire the ado, github, jira, and gitlab collections
- add backlog-management, backlog-plan, backlog-execute, functional-planner
- add backlog-manager and functional-planner agents
- retire 7 agents, 19 prompts, and 18 instruction files
- move ADO pull request and build workflows into skill references
- replace ado-backlog and github-backlog guides with unified backlog docs
- rewire 12 collection manifests and regenerate plugin and reference output

BREAKING CHANGE: the ado, github, jira, and gitlab collections are removed.
Install project-planning instead. The four Marketplace identities are
orphaned; existing installs are not redirected.

Fixes #2601

💥 - Generated by Copilot
- delete four platform package entries and their package docs
- register backlog manager, functional planner, and six skills in project-planning
- relocate gh-code-scanning to security with its experimental maturity
- drop 52 dangling component paths from hve-core-all and project-planning
- preserve owasp-docker removed tombstones in security and hve-core-all

BREAKING CHANGE: the ado, github, jira, and gitlab packages no longer exist.
Backlog capabilities consolidate into project-planning, which resolves the
backing tracker at runtime.

📦 - Generated by Copilot
- strip ado write, github write, and terminal tools from Backlog Manager
- add ado, github, and jira backlog executor subagents with one surface each
- declare executors in agents frontmatter and retarget mutating handoffs
- add direct-invocation contract to backlog-execute with write-surface stop
- register the three executors in project-planning and hve-core-all

BREAKING CHANGE: Backlog Manager no longer mutates any tracker. Every create,
update, link, transition, close, and comment is dispatched to the executor for
the resolved platform.

🔐 - Generated by Copilot
…ndings

* Add always-on backlog-guardrails instruction over all three tracking roots
* Make backlog-management the only owner of autonomy tiers and sanitization guards
* Gate ADO System.State as a transition and pause on GitHub security labels
* Replace cross-package #file: imports and hard-coded Jira CLI paths with named resolution
* Add Success criteria and Stop rules to the three user-invocable skills

BREAKING CHANGE: `backlog-guardrails.instructions.md` now attaches to
`.copilot-tracking/{workitems,github-issues,jira-issues}/**` and stops any
tracker-bound mutation when `backlog-management` does not resolve. Azure DevOps
`System.State` changes gate under Partial autonomy where they previously
auto-executed as field updates.

🔐 Generated by Copilot
* Wrap Get-ScopeDir call site in @() so zero and single scopes stay arrays
* Revert the bypassable Windows drive-letter exemption to the base disallow
* Add stimuli for functional-planner and the three platform executors
* Narrow a conformance grader that matched a deleted instruction filename
* Rename the synthetic inventory fixture to project-planning/backlog-manager

BREAKING CHANGE: surface signatures regenerate with the strict Windows
disallow, so `evals/baseline-equivalence/surface-signatures/backlog-manager.yml`
changes on the next generator run.

🔧 Generated by Copilot
* Retype backlog-plan and backlog-execute as skills across lifecycle guides
* List only genuinely auto-activated instructions in the delivery stage
* Route feature prioritization to requirements-author, not backlog-manager
* Add capability-status column, text alternatives, and expanded abbreviations
* Refresh ms.date on 18 authored pages and reset the PR body counts

BREAKING CHANGE: documentation now describes the packages model. The
collections vocabulary, the four retired package pages, and the
`docs/getting-started/collections.md` route are gone with no redirect.

📝 Generated by Copilot
* Restructure the three executors to the canonical subagent pattern
* Delegate the shared mutating protocol to backlog-execute, removing a second copy
* Lead Backlog Manager and Functional Planner with success criteria and stop rules
* Add Relationship Semantics and Interaction Templates to github and jira references
* Retarget two eval stimuli and one test fixture off deleted instructions

BREAKING CHANGE: executors now activate `backlog-execute` and run its Required
Flow. An executor dispatched without that skill resolvable stops instead of
carrying its own copy of the mutating protocol.

🔍 Generated by Copilot
@WilliamBerryiii
Bill Berry (WilliamBerryiii) force-pushed the feat/collection-topology-consolidation branch from 7248865 to 16d520b Compare August 7, 2026 19:24
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
pip/atheris 3.0.0 🟢 6.1
Details
CheckScoreReason
Packaging⚠️ -1packaging workflow not detected
Maintained⚠️ 23 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
SAST⚠️ 0no SAST tool detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Code-Review🟢 7Found 23/30 approved changesets -- score normalized to 7
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing🟢 10project is fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Security-Policy🟢 10security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
pip/colorama 0.4.6 UnknownUnknown
pip/coverage 7.13.4 UnknownUnknown
pip/iniconfig 2.3.0 UnknownUnknown
pip/packaging 26.0 UnknownUnknown
pip/pluggy 1.6.0 UnknownUnknown
pip/pygments 2.20.0 UnknownUnknown
pip/pytest 9.0.3 UnknownUnknown
pip/pytest-cov 7.0.0 UnknownUnknown
pip/pytest-mock 3.15.1 UnknownUnknown
pip/ruff 0.15.6 UnknownUnknown
pip/tomli 2.4.0 UnknownUnknown
pip/atheris 3.0.0 🟢 6.1
Details
CheckScoreReason
Packaging⚠️ -1packaging workflow not detected
Maintained⚠️ 23 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
SAST⚠️ 0no SAST tool detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Code-Review🟢 7Found 23/30 approved changesets -- score normalized to 7
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing🟢 10project is fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Security-Policy🟢 10security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
pip/colorama 0.4.6 UnknownUnknown
pip/coverage 7.13.4 UnknownUnknown
pip/iniconfig 2.3.0 UnknownUnknown
pip/packaging 26.0 UnknownUnknown
pip/pluggy 1.6.0 UnknownUnknown
pip/pygments 2.20.0 UnknownUnknown
pip/pytest 9.0.3 UnknownUnknown
pip/pytest-cov 7.0.0 UnknownUnknown
pip/pytest-mock 3.15.1 UnknownUnknown
pip/ruff 0.15.6 UnknownUnknown
pip/tomli 2.4.0 UnknownUnknown

Scanned Files

  • .github/skills/gitlab/gitlab/uv.lock
  • .github/skills/jira/jira/uv.lock
  • .github/skills/project-planning/gitlab/uv.lock
  • .github/skills/project-planning/jira/uv.lock

@codecov-commenter

Codecov Comments Bot (codecov-commenter) commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 86.98%. Comparing base (dd0f492) to head (d75272f).

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #2602      +/-   ##
==========================================
+ Coverage   82.85%   86.98%   +4.13%     
==========================================
  Files         166      104      -62     
  Lines       22508    11792   -10716     
  Branches       29       29              
==========================================
- Hits        18648    10257    -8391     
+ Misses       3857     1532    -2325     
  Partials        3        3              
Flag Coverage Δ
docusaurus 95.07% <ø> (ø)
pester 86.22% <ø> (-0.01%) ⬇️
pytest 91.38% <ø> (+11.49%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...b/skills/project-planning/gitlab/scripts/gitlab.py 100.00% <ø> (ø)
...ithub/skills/project-planning/jira/scripts/jira.py 99.76% <ø> (ø)
...h-code-scanning/scripts/Get-CodeScanningAlerts.ps1 97.50% <ø> (ø)

... and 63 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Eval Execution

Status: Passed — no merge-blocking failures (18 advisory assertion failure(s) present)

  • Artifacts evaluated: 26
  • Specs run: 28
  • Assertions passed: 144
  • Assertions failed (blocking): 0
  • Assertions failed (advisory): 18
  • Failed specs (merge-blocking): 0
Artifact Kind Status Specs Passed Failed (blocking) Failed (advisory)
experiment-designer agent ⚠️ advisory-fail 1 4 0 1
backlog-manager agent ✅ pass 1 20 0 0
functional-planner agent ✅ pass 1 10 0 0
meeting-analyst agent ✅ pass 1 5 0 0
prd-builder agent ✅ pass 1 5 0 0
ado-backlog-executor agent ✅ pass 1 10 0 0
github-backlog-executor agent ✅ pass 1 10 0 0
jira-backlog-executor agent ✅ pass 1 10 0 0
ux-ui-designer agent ✅ pass 1 5 0 0
backlog-manager brd-builder issue-triage prd-builder rpi-agent agent ✅ pass 3 0 0 0
experiment-designer instruction ✅ pass 1 3 0 0
licensing-posture instruction ✅ pass 1 3 0 0
adr-handoff instruction ✅ pass 1 3 0 0
backlog-guardrails instruction ⚠️ advisory-fail 1 2 0 1
community-interaction instruction ✅ pass 1 3 0 0
sssc-planner instruction ✅ pass 1 3 0 0
untrusted-content-boundary instruction ⚠️ advisory-fail 1 2 0 1
ado-create-pull-request prompt ✅ pass 1 3 0 0
ado-get-build-info prompt ✅ pass 1 3 0 0
backlog-execute skill ⚠️ advisory-fail 1 2 0 4
backlog-management skill ⚠️ advisory-fail 1 3 0 3
backlog-plan skill ⚠️ advisory-fail 1 3 0 2
functional-planner skill ⚠️ advisory-fail 1 6 0 5
gitlab skill ⚠️ advisory-fail 1 8 0 1
jira skill ✅ pass 1 9 0 0
gh-code-scanning skill ✅ pass 1 9 0 0

Legend — ✅ clean · ⚠️ advisory failures only (non-blocking) · ⏭️ skipped · ❌ merge-blocking failure

Only Failed specs (merge-blocking) gates this PR. Advisory assertion failures are signal-quality checks captured during iteration; review them, but they do not block merge and may be acceptable.

@WilliamBerryiii
Bill Berry (WilliamBerryiii) marked this pull request as ready for review August 7, 2026 19:33
@WilliamBerryiii
Bill Berry (WilliamBerryiii) requested a review from a team as a code owner August 7, 2026 19:33
@github-actions github-actions Bot mentioned this pull request Aug 7, 2026
* Cover the instruction P03 introduced, which had no eval stimulus

CI requires every changed AI artifact to declare a stimulus. The four Eval
Execute jobs share a coverage preflight, so this one gap failed all of them.

🧪 Generated by Copilot
* Supply each constraint in the prompt instead of assuming the agent is loaded
* Grade applied behavior rather than recall of an unloaded artifact
* Tag every agent stimulus advisory per the vally-tests agent routing rule
* Drop three graders that scored narration rather than measurable behavior

The agent-behavior spec loads two fixed skills and never loads the .agent.md
under test; --tag only filters stimuli. Graders needing artifact recall scored
0/5 while prompt-answerable and negative graders scored 5/5.

🧪 Generated by Copilot
…dation' into feat/collection-topology-consolidation

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comprehensive review found seven blocking High-severity issues. Each blocker is attached inline; Medium and Low findings are grouped in follow-up category comments.

"agents/hve-core/subagents/vally-test-author.md"
],
"commands": [
"commands/hve-core/ado-create-pull-request.md",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[High] Standalone hve-core omits a required skill

Problem: This package exposes both ADO commands, but its skills list does not include backlog-management. Both commands require that skill and stop before any Azure DevOps call when it cannot resolve, so the standalone hve-core installation advertises commands that deterministically fail.

Suggested fix: Add skills/project-planning/backlog-management and its recipe closure to hve-core, or move these commands to a package that already supplies the dependency. Add a package-closure test that resolves every command's named skill dependencies in each package that exposes it.


### Protocol

1. **Audit.** Run `printenv | grep -i JIRA` and classify each variable as set or missing. Use no modifying command during the audit. Check for an existing `~/.jira.env`.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[High] Jira setup audit can expose live credentials

Problem: printenv | grep -i JIRA prints complete values for JIRA_API_TOKEN or JIRA_PAT before presentation-layer masking can apply. Terminal output is visible to the agent and may be retained in chat or debug logs, exposing a reusable tracker credential.

Suggested fix: Probe an explicit allowlist of variable names and emit only SET or MISSING. Never print token values or prefixes. Add a sentinel-token test asserting that credentials never appear in stdout, stderr, chat output, or audit logs.

2. Resolve and display the **absolute** path so the user knows exactly which file to edit.
3. Open it with `code ~/.jira.env`.
4. The user replaces the placeholders and saves.
5. Source it (`set -a && source ~/.jira.env && set +a`) before running any command.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[High] Jira dotenv loading executes configuration as shell code

Problem: Sourcing ~/.jira.env executes substitutions, redirections, and arbitrary commands from a user-writable file in a terminal that holds Jira credentials and repository access. A modified or malformed file can therefore execute code or exfiltrate secrets during setup.

Suggested fix: Parse an allowlisted KEY=VALUE format without shell evaluation, reject unknown or duplicate keys and shell metacharacters, pass values directly to the Jira subprocess environment, and require owner-only permissions. Test $(), backticks, semicolons, redirections, and embedded newlines.

---
name: Functional Planner
description: 'Read-only Product Manager agent that analyzes PRDs and plans Azure DevOps, GitHub, or Jira work-item hierarchies without mutating a tracker'
tools: ['execute/getTerminalOutput', 'execute/runInTerminal', 'read/problems', 'read/readFile', 'read/terminalSelection', 'read/terminalLastCommand', 'edit/createDirectory', 'edit/createFile', 'edit/editFiles', 'search', 'web', 'agent', 'ado/search_workitem', 'ado/wit_get_work_item', 'ado/wit_get_work_items_for_iteration', 'ado/wit_list_backlog_work_items', 'ado/wit_list_backlogs', 'ado/wit_list_work_item_comments', 'ado/work_list_team_iterations', 'github/get_me', 'github/list_issue_types', 'github/get_label', 'github/search_issues', 'github/issue_read', 'microsoft-docs/*']

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[High] The read-only Functional Planner retains arbitrary shell authority

Problem: The planner is described as strictly read-only but receives execute/runInTerminal. It consumes untrusted PRDs, tracker bodies, comments, and web content, so prompt injection can induce shell commands, credential reads, or Jira mutations. The enforceable capability boundary is broader than the documented role.

Suggested fix: Remove terminal execution and terminal-output access. Route Jira reads through a constrained structured interface exposing only search, get, comments, and fields. Add an adversarial test proving that shell and mutation capabilities are unavailable, not merely refused in prose.

name: Jira Backlog Executor
description: "Runs the Jira skill CLI in one confirmed project. Applies a dispatched Jira operation set and returns Jira reads the caller cannot perform."
tools:
- execute/runInTerminal

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[High] The Jira executor's CLI-only policy is not enforced

Problem: execute/runInTerminal grants a general shell while the executor relies on prose to limit it to scripts/jira.py. The executor processes untrusted dispatches, Jira bodies, comments, and CLI output while credentials are present, so injected content can request arbitrary commands or cross-system actions.

Suggested fix: Replace shell access with a dedicated Jira tool wrapper using structured arguments and direct process invocation. Enforce a command allowlist, argument separation, destination checks, bounded output, and credential redaction. If that boundary cannot be provided, do not expose this executor as write-capable.


Pre-requisite setup: activate the `backlog-execute` skill by name. It owns the shared mutating protocol, including the operation contract, dry-run behavior, resumable execution, and the upstream human-review gate. When it does not resolve, report that the execution protocol is unavailable and stop before any Azure DevOps call.

1. Verify the contract: confirm the destination is present and every operation names a supported Azure DevOps action verb. Stop and report if either fails.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[High] ADO mutations are not bound to the confirmed project

Problem: Contract validation checks that a destination exists and the verb is supported, but it does not prove that each numeric System.Id or relationship endpoint belongs to the confirmed project. A stale or attacker-influenced handoff can mutate an accessible item in another project while reporting the confirmed destination.

Suggested fix: Hydrate every existing target and relationship endpoint before mutation and verify System.TeamProject matches the confirmed project. Require the confirmed project on creates, reject mismatches and dependent operations, and record the verified binding in the operation log.

Pre-requisite setup: activate the `jira` skill by name to resolve its CLI entry point, then activate the `backlog-execute` skill, which owns the shared mutating protocol including the operation contract, dry-run behavior, resumable execution, and the upstream human-review gate. When either does not resolve, report which one and stop before any terminal execution.

1. Preflight credentials: confirm `JIRA_BASE_URL` and either `JIRA_API_TOKEN` or `JIRA_PAT` are set. Report the missing variable by name and stop; never prompt for a token value in conversation and never echo a credential.
2. Verify the contract: confirm the project key is present and every operation maps to a documented CLI command.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[High] Jira mutations are not bound to the confirmed project key

Problem: Validation checks only that a project key is present and a CLI command exists. Existing issue keys and create payloads are not required to match the confirmed project, so a handoff confirmed for one project can update, transition, comment on, or create content in another project when the credential has access.

Suggested fix: Normalize the confirmed key, require every existing issue key and hydrated issue project to match it, and require every create payload's fields.project.key to match. Reject the operation set before the first mutation on any mismatch, with tests for create, update, transition, and comment.

@chaosdinosaur

Copy link
Copy Markdown
Collaborator

Medium/Low findings: security, authority, and data governance

GitHub executor has uncontracted coding-agent delegation

Problem: github/assign_copilot_to_issue launches another code-changing agent but is outside the executor's documented issue-operation contract. It has no dedicated action verb, confirmation rule, repository/base-ref validation, custom-instruction sanitization, or audit contract.

Suggested fix: Remove the tool. If assignment is required, create a separate explicitly confirmed workflow with validated repository/base ref, sanitized instructions, an autonomy gate under every tier, and delegation audit logging.

Post-call checkpointing can replay successful mutations

Problem: The workflow performs a remote mutation before checking the handoff operation and appending its result. A failure after remote success but before local persistence can cause resume to repeat creates, comments, links, transitions, closes, or non-idempotent updates.

Suggested fix: Write a pending operation record with a stable idempotency key before the call, then persist the remote identifier and terminal state. Reconcile pending operations against the tracker before retrying and add crash-injection tests.

Execution logs omit authority and approval provenance

Problem: Logs record a reference, action, and returned key, but not actor identity, confirmed destination, source handoff revision, autonomy tier, approval evidence, sanitization outcomes, validated target binding, correlation ID, or precondition state.

Suggested fix: Define a structured append-only audit record with those fields and test audit completeness and resume consistency.

Task-planning retention lacks privacy lifecycle controls

Problem: Local artifacts may preserve comments, exact errors, stack traces, names, email addresses, customer identifiers, incident details, or secrets without PII classification, redaction, purpose limitation, access protection, retention, deletion, or operator notice.

Suggested fix: Classify and redact PII and probable secrets before persistence, retain only planning-relevant fields, define local access and retention/deletion behavior, and test representative sensitive payloads.

@chaosdinosaur

Copy link
Copy Markdown
Collaborator

Medium/Low findings: functional contracts and validation

GitHub Actions build-info routing has no reachable tools

Problem: The Backlog Manager advertises direct GitHub Actions run, job, and log queries, but declares only GitHub issue and pull-request tools and prohibits terminal workarounds. The documented branch cannot execute.

Suggested fix: Declare concrete read-only Actions tools and test the route, or mark GitHub Actions build info unsupported until that tool surface exists.

Windows leakage validation only rejects the C drive

Problem: The signature generator claims drive-letter coverage but hard-codes C:\, allowing equally out-of-scope D:\, E:\, and other drive paths.

Suggested fix: Use a case-insensitive [A-Z]:\\ pattern in both branches and add a non-C drive test.

The shared core skill lacks explicit success and stop contracts

Problem: backlog-management is the structural authority used by wrappers and agents, but it lacks explicit success criteria and stop rules for platform resolution, planning bindings, sanitization, persistence, and review triggers.

Suggested fix: Add those sections, including stops for unresolved platform/destination, failed preflight, unavailable required skill, human-review triggers, and unresolved temporary IDs.

Evals do not exercise enforceable tool boundaries

Problem: Refreshed against head 64a812f1: the new stimuli remain advisory and regex-graded. They test policy wording, not actual tool availability, forbidden calls, destination rejection, dry-run non-mutation, or resume idempotence.

Suggested fix: Add contained tests with instrumented fake tools and adversarial PRD, issue, comment, CLI-output, and handoff content. Assert exact allowed calls, zero forbidden calls, destination binding, approval gating, guard application, dry-run behavior, idempotence, and audit records.

@chaosdinosaur

Copy link
Copy Markdown
Collaborator

Medium/Low findings: accessibility and labels

HTML checklist state is exposed only as punctuation

Problem: Azure DevOps Server HTML uses ordinary list items prefixed with [ ] or [x] and claims predictable screen-reader announcement. The markup exposes neither checkbox semantics nor explicit state words, so assistive technology can lose the pending-versus-complete distinction.

Suggested fix: Use explicit Pending: and Complete: text, or verified native disabled checkbox markup when Azure DevOps preserves accessible semantics. Remove the unsupported announcement claim and test the rendered work item with Narrator or NVDA.

The PRD handoff label contains a replacement character

Problem: � Build PRD displays corrupted text and can be announced as an unknown character, reducing control clarity.

Suggested fix: Use Build PRD, or place a valid familiar icon after the complete text label.

@chaosdinosaur

Copy link
Copy Markdown
Collaborator

Medium/Low findings: migration and PR readiness

Retired public surfaces lack a complete migration map

Problem: The overview does not map retired packages, agents, prompts, Jira/GitLab skills, and code scanning to installable replacements or state the required reinstall/upgrade action.

Suggested fix: Add one authoritative old-to-new table and link it from the PR description and retirement pages.

Relocated ADO commands are described as unchanged

Problem: Their names remain, but package ownership, dependency loading, preflight, destination confirmation, sanitization, autonomy handling, and failure behavior changed.

Suggested fix: Describe name compatibility separately from the new runtime controls and stop behavior on both ADO migration pages.

The current branch is behind and required checks fail

Problem: Head 64a812f1 is mergeable but BEHIND; npm Security Audit fails and the aggregate PR Validation Success check consequently fails.

Suggested fix: Update from main, resolve any resulting changes, investigate the npm audit failure, and rerun required checks before merge.

Required validation checklist entries remain unchecked

Problem: The PR body still leaves local validation, docs validation, spell checking, and link validation unchecked despite broad documentation and generated-surface changes.

Suggested fix: Record exact successful command outcomes and have the author check each item only after it passes.

PR description omits or misstates material scope

Problem: It describes GitLab as having a backlog-manager agent, omits multiple agent retirements, executors, code-scanning and ADO prompt moves, settings, and licensing/security changes, and leaves linting configuration unchecked despite .cspell.json changes.

Suggested fix: Correct the opening and scope list, and align the Type of Change selections with the actual diff.

@chaosdinosaur

Copy link
Copy Markdown
Collaborator

Medium/Low findings: documentation contract accuracy

Discovery guide hard-codes ADO artifact names

Problem: It tells GitHub and Jira users to expect artifact-analysis.md and work-items.md, while their bindings use issue-analysis.md and issues-plan.md.

Suggested fix: Document platform-resolved filenames or use generic placeholders with an explicit binding table.

Execution guide publishes the wrong persistent artifacts

Problem: It promises execution-log.md and a completion-summary handoff.md under a new scope, while execution consumes the reviewed handoff in place, appends handoff-logs.md, and may write summary.md.

Suggested fix: Document the implemented in-place contract and identify which artifact owns approval, operation history, and completion status.

ADO item-type discovery is overstated

Problem: The guide says types are discovered from the process template, but the canonical reference says no MCP tool lists them and user confirmation or an unvalidated marker is required.

Suggested fix: State that GitHub/Jira types are discoverable and ADO process types require explicit confirmation.

Sprint guide lists files the protocol never creates

Problem: It promises coverage-matrix.md, capacity.md, and handoff.md; the protocol uses planning-log.md and sprint-plan.md with embedded coverage and capacity.

Suggested fix: Document actual outputs, or add the missing outputs to the owning contract before documenting them.

Task-planning guide uses nonexistent paths and filenames

Problem: It uses task-planning/<scope-name>/, enriched-items.md, and handoff.md; the reference uses current-work/my-assigned-work-items/, platform analysis/plan files, and task-planning-logs.md.

Suggested fix: Replace the tree with the implemented bindings and Stage 2 handoff name.

Triage guide promises files the workflow does not produce

Problem: It lists duplicates.md and handoff.md; duplicate evidence and recommendations live in triage-plan.md, which is later passed to backlog-execute run.

Suggested fix: Document planning-log.md and triage-plan.md, including the latter's role as execution input.

@jkim323 Jamie Kim (jkim323) left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the exceptionally thorough PR description and consolidation work! The relocation map, change-shape breakdown, explicit capability ownership, and validation evidence made a very large cross-cutting refactor much easier to review. I left couple items to be looked at.

Comment on lines +179 to +197
### Dry Run Mode

Dry run is a full simulation with zero platform mutations. When the caller enables `dryRun`:

* Resolve, validate, and sanitize every payload exactly as a live run would, including the Content Sanitization Guards.
* Do not call any create, update, transition, close, comment, or link operation. Read-only calls used for validation remain permitted.
* Assign a simulated key of the form `{{TEMP-N}} -> (dry-run)` instead of a real item key, and mark every dependent operation that would have consumed a real key.
* Log each operation in `handoff-logs.md` with status `dry-run` and the payload summary that would have been sent.
* Leave `handoff.md` checkboxes unchecked, because no operation completed.
* Report the simulated counts and state clearly that nothing was created, changed, or closed.

Autonomy gates still apply in dry run so the simulated run exercises the same decision path as the live run.

### Step 1: Initialize or Resume

When `handoff-logs.md` exists, read it and `handoff.md`, identify unchecked `[ ]` operations, rebuild the `{{TEMP-N}}` mapping from completed Create entries, and resume from the first unchecked operation. When it does not exist, create it from the template, populate the operation-log skeleton from `handoff.md`, and record inputs in the execution summary.

Validate before processing: confirm the project or repository is set for creates; confirm each referenced existing item can be read with `get` (skip `{{TEMP-N}}` placeholders during reference validation); call `fields` when create payloads use unvalidated item types or field names; apply the Content Sanitization Guards to all platform-bound fields; abort on critical failures such as missing project scope for creates or an authentication failure, and warn and continue on non-critical failures such as an unknown label or milestone.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Keep dry-run state out of resumable execution records

Dry runs write simulated Create results and {{TEMP-N}} -> (dry-run) mappings into handoff-logs.md, but resume rebuilds temporary-ID mappings from completed Create entries in that same log. A subsequent live run can therefore treat simulated work as complete or substitute (dry-run) into a child, link, or other dependent operation; the current sanitization rules do not reject that value.

Suggested fix: write dry-run entries to a separate Dry Run Log section, never to the Operation Log or the Temporary ID Mapping section; rebuild the mapping only from Operation Log entries with status Success; add a stop rule for a mapping that resolves any placeholder to a simulated key.


### Step 1: Initialize or Resume

When `handoff-logs.md` exists, read it and `handoff.md`, identify unchecked `[ ]` operations, rebuild the `{{TEMP-N}}` mapping from completed Create entries, and resume from the first unchecked operation. When it does not exist, create it from the template, populate the operation-log skeleton from `handoff.md`, and record inputs in the execution summary.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Use one durable resume predicate

The protocol currently resumes from the first unchecked operation here, from the first unlogged operation in backlog-execute, and from the first unchecked or unlogged operation in the core skill. Because Step 2 checks handoff.md before appending its log entry, an interruption in that window leaves the operation checked but unlogged: one path skips it while another reruns it, including a completed Create.

Suggested fix: Please make successful live entries in handoff-logs.md the sole resume authority, append that entry before updating the checkbox, and reconcile all three descriptions to the same rule.


1. Summarize recommendations in `triage-plan.md` using a table with columns: Item, Summary, Suggested Fields, Suggested Transition, Duplicates, Action.
2. Present the plan for review, highlighting high-confidence updates, potential duplicates, ambiguous transitions, and missing project or item-type context.
3. Finalize `triage-plan.md` as the reviewable execution contract and record its path in `planning-log.md`. Name `backlog-execute run <triage-plan.md>` as the separate pass that applies any recommendation. Do not execute a recommendation here, and do not issue a mutating platform call from this workflow.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Materialize triage recommendations into an execution handoff

This path names backlog-execute run <triage-plan.md>, but triage-plan.md has no operation checkboxes, stable <PREFIX>NNN references, verb-ordered sections, or temporary-ID allocations. The execution protocol therefore cannot initialize, resume, resolve dependencies, or mark a triage run complete consistently.

Suggested fix: Have Triage Phase 2 materialize its recommendations into a standard handoff.md with the required operation sections, reference IDs, checkboxes, and temporary IDs, then name backlog-execute run <handoff.md> as the execution path after review. triage-plan.md should remain analysis, not an execution contract.

* **Open Questions**: [Summary]
````

### handoff.md

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Add an explicit upstream-review gate to generated handoffs

backlog-execute halts only on an unchecked human-review checkbox, but this shared template creates no such checkbox—only unchecked operation entries. As a result, locally generated handoffs bypass the upstream-review requirement; treating the operation boxes as review gates would instead halt every new run.

Suggested fix: Please add a dedicated ## Human Review or ## User Signoff section (for example, - [ ] Reviewed and validated by a qualified human reviewer) and require that specific checkbox to be checked before execution, while leaving operation checkboxes as execution state only.

Comment thread .github/agents/project-planning/functional-planner.agent.md
| State changes | Carried by an Update to `System.State`, gated as a transition rather than an ordinary field update |
| Authoring templates | The interaction templates in the Azure DevOps reference of the `backlog-management` skill |

## Constraints

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] Centralize executor-common constraints to prevent drift

The three executor agents repeat several shared execution constraints and the same handoff-logs.md path-formatting rule, despite backlog-execute being described as the shared mutating protocol.

Suggested fix: Please move the truly platform-neutral rules—including executor-authored-text sanitization, untrusted-content handling, shortcut prohibition, operation logging, and workspace-path formatting—into backlog-execute, then have each executor reference that protocol while retaining only its platform-specific deltas.

| Task Planning | `backlog-plan` skill, `my-work` then `task-plan` mode |
| Execution | The executor subagent for the resolved platform, dispatched operation set |
| Single Item | The executor subagent for the resolved platform, single-item dispatch |
| PRD Planning | Routes to the `functional-planner` skill (read-only hierarchy planning); on completion, the user invokes Execution |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] Dispatch PRD Planning to the same target named everywhere else

The handoff definition and PRD-planning classification identify Functional Planner as the target, but this dispatch row routes to the functional-planner skill instead. Agents and skills have different execution surfaces and contracts, so this leaves the actual PRD-planning path ambiguous.

Suggested fix: Please make this row dispatch to the Functional Planner agent, or change the other references if the skill is intended to be the sole entry point.

| Failed create | The create call returns an error | Log the error, leave the `{{TEMP-N}}` unresolved, skip every dependent operation that references it, continue |
| Failed update | The update call returns an error | Log the error and the attempted payload, continue |
| Item not found | A referenced key returns a not-found response | Log the missing key, skip the operation, continue |
| Rate limited | The platform reports a rate limit | Pause for the platform's reset window, retry with exponential backoff, log the pause, then continue |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question: Is the unbounded rate-limit retry intentional? This row requires exponential-backoff retries but, unlike the transient-network-failure row below, does not define a maximum attempt count, total wait budget, or terminal outcome when the platform remains rate-limited. If retries are intentionally indefinite, could we document that explicitly and explain how the user regains control? Otherwise, should this cap retries/wait time and abort or block the run while preserving handoff-logs.md for resumption?

Comment thread docs/agents/README.md
| RPI Orchestration | 1 | High | [RPI Documentation](../rpi/README.md) |
| [Code Review](#code-review) | 3 | Medium | [Code Review](code-review/README.md) |
| [Backlog Management](#backlog-management) | 2 active | Very High | [Backlog Management](backlog/README.md) |
| [Project Planning](#project-planning) | 9 | Medium-High | [Project Planning](project-planning/README.md) |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] Reconcile the Project Planning agent count with its landing page

This catalog says Project Planning contains 9 agents, but the linked Project Planning page says “Four agents” and lists only four in its Agent Overview. The surrounding catalog prose also implies a broader capability set than that page documents.

Suggested fix: Please align the count and the group page’s inventory so users can tell which agents are included in this category.

| Item vocabulary | Platform reference, Platform Bindings table | "work item" | "issue" | "issue" |
| Action verbs | Platform reference, Platform Bindings table | Create, Update, Link, Comment, No Change | Create, Update, Link, Close, Comment, No Change | Create, Update, Transition, Comment, No Change |

`planning-log.md`, `handoff.md`, and `handoff-logs.md` are constant across platforms. The templates below use `<analysis-file>` and `<plan-file>` where a binding applies; substitute the platform's value when creating the file.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] Define the source for in the shared binding table

The templates require substituting , but this binding table has no reference-ID-prefix row. The values only appear later in each platform reference (WI, IS, and JI), so a consumer following this file’s stated resolution path cannot derive the template IDs.

Suggested fix: Please add a Reference-ID prefix binding here, or explicitly direct resolution to the Platform Bindings table in the active platform reference.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(collections)!: consolidate platform backlog collections into project-planning

4 participants